package Foundation;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;

import TechnicalServices.DataConnector;
import TechnicalServices.IMapper;
import DomainPackage.*;
public class YolcuBiletMapper implements IMapper {

	@Override
	public Object get(int ID) {
		YolcuBilet yolcubilet = new YolcuBilet();
		ResultSet rs = DataConnector.getInstance().query("select * from yolcubilet where biletid = " + ID + "");
		int int4 = 0;
		int int5 = 0;
		if (rs != null){
            
            try {
            		rs.next();
                    int4 = Integer.parseInt(rs.getString(4));
                    int5 = Integer.parseInt(rs.getString(5));

            		Koltuk k = new Koltuk();
            		k.setKoltukNo(rs.getString(6));
            		
            		yolcubilet.setBiletID(Integer.parseInt(rs.getString(1)));
            		yolcubilet.setTarih(new GregorianCalendar(Integer.parseInt(rs.getString(2).split("-")[0]), 
							Integer.parseInt(rs.getString(2).split("-")[1]), 
							Integer.parseInt(rs.getString(2).split("-")[2])));
            		yolcubilet.setBagaj(Float.valueOf(rs.getString(3)));

            		yolcubilet.setKoltuk(k);
            		
                   
            } catch (NumberFormatException e) {
                    System.out.println("YolcuBiletMapper: number format problem");
                    e.printStackTrace();
            } catch (SQLException e) {
                    System.out.println("YolcuBiletMapper: sql problem");
                    e.printStackTrace();
            }
		}
		else
            System.out.println("no yolcubilet with given ID");
		MusteriMapper mm = new MusteriMapper();
        Musteri m = (Musteri) mm.get(int4);
        YolcuUcusMapper yum = new YolcuUcusMapper();
        YolcuUcus yu = (YolcuUcus) yum.get(int5);
		
		yolcubilet.setMusteri(m);
		yolcubilet.setUcus(yu);
		return yolcubilet;
	}

	@Override
	public int put(Object object) {
		YolcuBilet yolcubilet=(YolcuBilet) object;
		String dt = "";
		GregorianCalendar dta = yolcubilet.getTarih();
		dt += String.valueOf(dta.get(GregorianCalendar.YEAR)) + "-";
		dt += String.valueOf(dta.get(GregorianCalendar.MONTH)) + '-';
		dt += String.valueOf(dta.get(GregorianCalendar.DAY_OF_MONTH));
		if(!DataConnector.getInstance().update("INSERT INTO yolcubilet "+
				"(biletid, tarih, koltukno, bagaj, musteri, yolcuucus) " +
				"values ('"+yolcubilet.getBiletID()+"', '"+
				dt+"', '"+
				yolcubilet.getKoltuk().getKoltukNo()+"', '"+
				yolcubilet.getBagaj()+"', '"+
				yolcubilet.getMusteri().getMusteriID()+"', '"+
				yolcubilet.getUcus().getUcusID()+
				"')")){
			System.out.println("error");
		}
		return 0;
	}

	@Override
	public List<Object> getAll() {
		List<Object> allYolcuBiletList = new ArrayList<Object>();
    	ResultSet rs = DataConnector.getInstance().query("select * from yolcubilet;");
    	int numberOfRows=0;
		try {
			ResultSetMetaData rsMetaData = rs.getMetaData();
            numberOfRows = rsMetaData.getColumnCount()+1;
		} catch (SQLException e1) {
			e1.printStackTrace();
		}

    try {
    	if (rs != null){
            while(rs.next()){
                    
            		YolcuBilet yolcubilet= new YolcuBilet();             	
                    	Musteri m = new Musteri(Integer.parseInt(rs.getString(4)));
                    	YolcuUcus yu = new YolcuUcus();
                    	yu.setUcusID(Integer.parseInt(rs.getString(5)));
                    	Koltuk k = new Koltuk();
                    	k.setKoltukNo(rs.getString(6));
                    	yolcubilet.setBiletID(Integer.parseInt(rs.getString(1)));
                    	yolcubilet.setTarih(new GregorianCalendar(Integer.parseInt(rs.getString(2).split("-")[0]), 
    							Integer.parseInt(rs.getString(2).split("-")[1]), 
    							Integer.parseInt(rs.getString(2).split("-")[2])));
                    	yolcubilet.setBagaj(Float.valueOf(rs.getString(3)));
                		
                    	yolcubilet.setMusteri(m);
                    	yolcubilet.setUcus(yu);
                    	yolcubilet.setKoltuk(k);
                            allYolcuBiletList.add(yolcubilet);             
            }
    	}
    }
    catch(Exception e){
    	e.printStackTrace();
    }
    	for (Object se: allYolcuBiletList){
    		YolcuBilet yb = (YolcuBilet) se;
    		YolcuUcusMapper yum = new YolcuUcusMapper();
    		MusteriMapper mm = new MusteriMapper();
    		
    		YolcuUcus y = (YolcuUcus) yum.get(yb.getUcus().getUcusID());
    		Musteri m = (Musteri) mm.get(yb.getMusteri().getMusteriID());
    		
    		yb.setMusteri(m);
    		yb.setUcus(y);
    	}
    	return allYolcuBiletList;	
		
	}

}
